Computers often share physical resources such as a cache memory and a main memory amongst a number of different applications. Usually, the cache memory of a computer will have a higher access speed than the main memory, and physical addresses on the main memory are mapped to particular locations on the cache, known as cache lines. Sometimes, one or more of the applications sharing the cache and memory is an “attacker” that is attempting to compromise another application, such as by reading secret data or causing the application to crash or otherwise execute incorrectly. Attackers can sometimes exploit certain characteristics of these shared resources to compromise other applications.
As a particular example, one way for an attacker to obtain secret data from another application is known as a “cache side channel attack.” In a cache side channel attack, the attacker accesses one or more physical memory addresses and uses a precise timer to determine how long each access takes. If the access time exceeds the cache latency, the attacker knows that other physical memory addresses that map to the cache line have been used by another application. By repeatedly measuring how long it takes to access physical memory, the attacker can gather information about the memory access patterns of the other application. In some cases, the attacker can even derive a cryptographic key used by the other application, because memory access patterns used for encrypting or decrypting data can vary depending on the cryptographic key.